<?php

/**
 * This is the model class for table "portfolio".
 *
 * The followings are the available columns in table 'portfolio':
 * @property integer $id
 * @property string $name
 * @property string $short_description
 * @property string $detail
 * @property string $link
 * @property string $media
 *
 * The followings are the available model relations:
 * @property PortfolioTag[] $portfolioTags
 */
class Portfolio extends CActiveRecord {

const FOLDER = "media";

public $mediaFile;
public $assigntags;


/**
 * @return string the associated database table name
 */
public function tableName() {
return 'portfolio';
}

/**
 * @return array validation rules for model attributes.
 */
public function rules() {
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('name', 'required'),
 array('id', 'numerical', 'integerOnly' => true),
 array('name', 'length', 'max' => 150),
 array('short_description', 'length', 'max' => 250),
 array('link', 'length', 'max' => 100),
 array('mediaFile', 'file',
 //'types' => 'doc,docx,pdf,txt,',
//        'maxSize' => 1024 * 1024 * 1, // 1MB
//        'tooLarge' => 'The file was larger than 1MB. Please upload a smaller file.',
'allowEmpty' => 1,
 ),
 array('detail,assigntags,media', 'safe'),
 // The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, name, short_description, detail, link, media', 'safe', 'on' => 'search'),
);
}

/**
 * @return array relational rules.
 */
public function relations() {
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'tags' => array(self::MANY_MANY, 'Tag', 'portfolio_tag(portfolio_id,tag_id)'),
);
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels() {
return array(
'id' => 'ID',
 'name' => 'Name',
 'short_description' => 'Excerpt',
 'detail' => 'Detail',
 'link' => 'Link',
 'mediaFile' => 'Media',
 'assigntags' => 'Tags'
);
}

/**
 * Retrieves a list of models based on the current search/filter conditions.
 *
 * Typical usecase:
 * - Initialize the model fields with values from filter form.
 * - Execute this method to get CActiveDataProvider instance which will filter
 * models according to data in model fields.
 * - Pass data provider to CGridView, CListView or any similar widget.
 *
 * @return CActiveDataProvider the data provider that can return the models
 * based on the search/filter conditions.
 */
public function search() {
// @todo Please modify the following code to remove attributes that should not be searched.

$criteria = new CDbCriteria;

$criteria->compare('id', $this->id);
$criteria->compare('name', $this->name, true);
$criteria->compare('short_description', $this->short_description, true);
$criteria->compare('detail', $this->detail, true);
$criteria->compare('link', $this->link, true);
$criteria->compare('media', $this->media, true);

return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}

/**
 * Returns the static model of the specified AR class.
 * Please note that you should have this exact method in all your CActiveRecord descendants!
 * @param string $className active record class name.
 * @return Portfolio the static model class
 */
public static function model($className = __CLASS__) {
return parent::model($className);
}




/*
 * to add related tags
 */

public function behaviors() {
return array(
'ImageBehavior' => array(
'class' => 'application.models.behaviors.ImageBehavior',
 ),
 'TagBehavior' => array(
'class' => 'application.extensions.taging.TagBehavior',
 'tagTable' => 'bjn_tag',
 'relationalTable' => 'bjn_portfolio_tag',
 'ownerColumn' => 'portfolio_id'
));
}

public function getSlug(){
$slug = str_replace(" ", "_", $this->name);
return "/portfolio/".  urlencode(strtolower($slug));

}
}



